// 只导入一次axios和相关类型
import axios from 'axios';
import type { AxiosInstance, AxiosResponse, AxiosError } from 'axios';

// 创建axios实例
const service: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 60000
});

// 请求拦截器
(service as AxiosInstance).interceptors.request.use(
  (config) => {
    // 可以在这里添加token等认证信息
    return config;
  },
  (error: AxiosError) => {
    console.error('Request Error:', error.message);
    return Promise.reject(error);
  }
);

// 响应拦截器 - 修复错误处理逻辑
(service as AxiosInstance).interceptors.response.use(
  (resData: AxiosResponse) => {
    const res = resData.data;
    // 确保安全访问res的属性
    if (res && typeof res === 'object') {
      // 修复：根据常见的后端响应格式调整判断条件
      // 1. 检查是否有success字段且为true
      if ('success' in res && typeof res.success === 'boolean') {
        if (res.success) {
          return res;
        } else {
          return Promise.reject(new Error(res.message || '请求失败'));
        }
      }
      // 2. 检查是否有code字段且为成功状态码
      else if ('code' in res && typeof res.code === 'number') {
        if (res.code === 20000 || res.code === 200) {
          return res;
        } else {
          return Promise.reject(new Error(res.message || `请求失败: 状态码 ${res.code}`));
        }
      }
    }
    // 默认返回数据
    return res;
  },
  (error: AxiosError) => {
    console.error('API Error:', error.message);
    return Promise.reject(error);
  }
);

// 常用的请求方法封装
const request = {
  get<T = any>(url: string, config?: any): Promise<T> {
    return service.get(url, config);
  },
  post<T = any>(url: string, data?: any, config?: any): Promise<T> {
    return service.post(url, data, config);
  },
  put<T = any>(url: string, data?: any, config?: any): Promise<T> {
    return service.put(url, data, config);
  },
  delete<T = any>(url: string, config?: any): Promise<T> {
    return service.delete(url, config);
  }
};

// 只导出一次默认值和命名导出
export { request };
export default service;